package zengqiang.day03.ad

//kotlin中Any类似于Object,但是Any不囊括kotlin中所有类型，所以泛型是有必要存在的
fun main(args: Array<String>) {
    var f=Fruit()
    var t=Thing()
    var a=Apple()

    var fb1=FruitBox(f)
    var fb2=FruitBox(t)
    //上面可以传入任何类型，但是当我们需要允许某个类型及其子类型可传入时候就用到了泛型上限'

    //泛型上限
    var fb11=Fruit111Box(f)
//    var fb22=Fruit111Box(t)  报错，因为Thing和Fruit没有任何关系
    var fb33=Fruit111Box(a) //此处是可以的，因为，是Fruit的子类
}
open class Box<T>(var thing: T)
class FruitBox<T>(thing: T) : Box<T>(thing)
class Fruit111Box<T:Fruit>(thing: T) : Box<T>(thing)
open class Fruit
open class Thing
class Apple : Fruit()